package view.client;

import java.rmi.AlreadyBoundException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import rmi.Constantes;
import rmi.UtilitairesRmi;
import server.controlleurs.lobby.ILobbyControlleur;
import server.models.participant.Participant;
import view.partie.PartieView;
import view.utils.JOptionPaneFactory;

public class Connexion {

	private ILobbyControlleur lobbyControlleur = null;
	private Client client = null;

	public Connexion() {

		try {
			initAccesServeurRmi();
			this.lobbyControlleur = (ILobbyControlleur)UtilitairesRmi.getInstance().obtenirObjet(Constantes.Controlleurs.LOBBY);

			this.client = new Client();
		} catch (RemoteException | NotBoundException | AlreadyBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void initialiseJeu() {

		PartieView partie;
		try {
			String nom = "";
			String message = "Choisissez votre nom";

			while (nom == "")
			{
				nom = JOptionPaneFactory.choisirNomDeParticipant(message);

				if (nom.length() == 0) {				
					message = "Veuillez entrer un nom";				
				}
			}
			partie = new PartieView(this.lobbyControlleur.getPartie(0), nom);
			this.client.setPartie(partie);
			client.setNomClient(nom);
			Participant participant = new Participant((IClient)UtilitairesRmi.getInstance().obtenirEtBind(this.toString(), this.client), nom);
			this.lobbyControlleur.ajouterParticipant(participant);
			this.lobbyControlleur.joindrePartie(participant);

		}  catch (RemoteException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (AlreadyBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

	}

	public static void main(String[] args) {
		Connexion connection = new Connexion();
		connection.initialiseJeu();
	}
	
	private void initAccesServeurRmi() throws RemoteException {
		String adresseIP = "";
		String messageIP = "Entrer le IP du serveur";
		while (adresseIP == "")
		{
			adresseIP = JOptionPaneFactory.choisirNomDeParticipant(messageIP);

			if (adresseIP.length() == 0) {				
				messageIP = "Veuillez entrer l'adresse IP du serveur";				
			}
		}
		
		if (UtilitairesRmi.lookoutForRmiRegistry(adresseIP) == null) {
			throw new RemoteException("Le server RMI n'est pas ouvert");
		}
	}
}
